home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / workbench / tools / czesc_2 / life / life.c < prev    next >
C/C++ Source or Header  |  1994-01-12  |  3KB  |  122 lines

  1. /*
  2.  *  LIFECYCLES.C  --  compute a lifecycles GNUPLOT file
  3.  *
  4.  *  (c)Copyright 1992-93 by Tobias Ferber, All Rights Reserved
  5.  */
  6.  
  7. #include <exec/types.h>
  8. #include <stdio.h>
  9. #include "idate.h"
  10.  
  11. static char rcs_id[]= "$VER: $Id: life.c,v 1.3 93/01/14 18:02:52 tf Exp $";
  12.  
  13. static char *dname[]= { "Sunday","Monday","Tuesday","Wednesday",
  14.                         "Thursday","Friday","Saturday" };
  15.  
  16. static char *mname[]= { "January","February","March","April","May","June","July",
  17.                         "August","September","October","November","December" };
  18. /*
  19. static char *dname[]= { "Sonntag","Montag","Dienstag","Mittwoch",
  20.                         "Donnerstag","Freitag","Samstag","Sonntag" };
  21.  
  22. static char *mname[]= { "Januar","Februar","März","April","Mai","Juni","Juli",
  23.                         "August","September","Oktober","November","Dezember" };
  24. */
  25. /* GNUPLOT output format */
  26.  
  27. static char *pltfmt[2] = {
  28.   "set grid\n"
  29.   "set dummy t\n"
  30.   "set format x \"%%g\"\n"
  31.   "k=23\n"
  32.   "s=28\n"
  33.   "g=33\n"
  34.   "f=38\n"
  35.   "n=%d\n"
  36.   "tmax=%d\n"
  37.   "set title \"%s\"\n"
  38.   "set ylabel \"phase\"\n"
  39.   "set xlabel \"days\"\n"
  40.   "set yrange [-1.5:1.5]\n"
  41.   "set ytics (\"low\" -1,\"critical\" 0.,\"high\" 1)\n"
  42.   "set xrange [0.:tmax-1]\n",
  43. /* --- we'll insert the xtics here --- */
  44.   "bio(t,r)=sin((t+n%r)*(2*pi/r))\n"
  45.   "plot  bio(t,k) title \"male\",\\\n"
  46.   "      bio(t,s) title \"female\",\\\n"
  47.   "      bio(t,g) title \"intellect\",\\\n"
  48.   "      bio(t,f) title \"feeling\""
  49. };
  50.  
  51. static char *texfmt[2]= {
  52.   "\\begin{center}\\begin{tabular}{rrlrrrr}\n"
  53.   "\\hline\n"
  54.   "\\multicolumn{3}{r}{Completed periods} & %d & %d & %d & %d\\\\\n"
  55.   "\\hline\n"
  56.   "\\multicolumn{2}{c}{Date}&{\\tt MFIS} & M & F & I & S\\\n"
  57.   "\\hline\n",
  58. /* --- we'll insert the data here --- */
  59.   "\\hline\n"
  60.   "\\end{tabular}\\end{center}\n"
  61. };
  62.  
  63. #define _k  23
  64. #define _s  28
  65. #define _g  33 /* period: (23*28*33)d = approx. 58a */
  66. #define _f  38 /* period: (23*28*33*38)/2 = 403788d (approx. 1105.5a) */
  67.  
  68. void print_xtics(int n)
  69. { static int tics[31]= { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  70.                          0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
  71.   int c,t;
  72.   for(c=0;c<=8;c++)
  73.   { t=(c*_k+2)/4-(n%_k); if(0<=t && t<31) ++tics[t];
  74.     t=(c*_s+2)/4-(n%_s); if(0<=t && t<31) ++tics[t];
  75.     t=(c*_g+2)/4-(n%_g); if(0<=t && t<31) ++tics[t];
  76.     t=(c*_f+2)/4-(n%_f); if(0<=t && t<31) ++tics[t];
  77.   }
  78.   printf("set xtics ");
  79.   for(c=t=0;t<31;t++)
  80.   { if(tics[t]>0)
  81.     { printf("%c \"%d\" %d",(c>0)? ',' : '(',t+1,t);
  82.       if(((++c)%8)==0) printf("\\\n          ");
  83.     }
  84.   }
  85.   printf(")\n");
  86. }
  87.  
  88. void main(int argc, char *argv[])
  89. {
  90.   static char title[256];
  91.   int d,m,y;  /* birthday */
  92.   int mm,yy;  /* month to plot */
  93.   int n;      /* age in days */
  94.  
  95.   if(argc<3)
  96.   { puts(&rcs_id[6]);
  97.     puts("(c)Copyright 1992-93 by Tobias Ferber, All Rights Reserved\n"
  98.          "LIFE <ddmmyyyy> <mmyyyy> [ > gnuplot file ]");
  99.     exit(0);
  100.   }
  101.   sscanf(argv[1],"%2d%2d%4d",&d,&m,&y);
  102.   sscanf(argv[2],"%2d%4d",&mm,&yy);
  103.   if(checkdate(d,m,y)==0)
  104.   { fprintf(stderr,"Illegal date:  %02d.%02d.%04d\n",d,m,y);
  105.     exit(5);
  106.   }
  107.   if(checkdate(1,mm,yy)==0)
  108.   { fprintf(stderr,"Illegal date:  01.%02d.%04d\n",mm,yy);
  109.     exit(5);
  110.   }
  111.   n=dayrange(d,m,y, 1,mm,yy);
  112.   puts("# LIFECYCLES: GNUPLOT file");
  113.   sprintf(title,"*%s, %d.%d.%d     Lifecycles for %s %d",
  114.     dname[wday(d,m,y)],
  115.     d,m,y,
  116.     mname[mm-1],yy );
  117.   printf(pltfmt[0],n,monlen(mm,yy),title);
  118.   print_xtics(n);
  119.   puts(pltfmt[1]);
  120.   exit(0);
  121. }
  122.